package com.interview.server.service.impl;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;

import com.interview.server.utils.FileUploadUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.interview.server.mapper.FileMapper;
import com.interview.server.domain.File;
import com.interview.server.service.IFileService;
import org.springframework.web.multipart.MultipartFile;

/**
 * 文件元数据Service业务层处理
 * 
 * @author shaobin
 * @date 2021-03-29
 */
@Service
public class FileServiceImpl implements IFileService {
    @Autowired
    private FileMapper fileMapper;

    /**
     * 查询文件元数据
     * 
     * @param uuid 文件元数据UUID
     * @return 文件元数据
     */
    @Override
    public File selectFileByUuid(String uuid) {
        return fileMapper.selectFileByUuid(uuid);
    }

    /**
     * 根据UUID下载对应文件
     *
     * @param uuid 文件元数据ID
     * @throws IOException 文件不存在或文件读取失败时抛出异常
     */
    @Override
    public void downloadFileByUuid(String uuid, OutputStream os) throws IOException {
        File file = fileMapper.selectFileByUuid(uuid);
        if(file == null){
            throw new FileNotFoundException("没有对应的文件");
        }
        FileUploadUtils.writeBytes(file.getFilePath(),os);
    }

    /**
     * 上传文件
     *
     * @param file 需要上传的文件
     * @return 文件的UUID
     */
    @Override
    public String uploadFile(MultipartFile file) throws IOException {
        File val = FileUploadUtils.upload(file);
        fileMapper.insertFile(val);
        return val.getFileUuid();
    }
}
